#include <bits/stdc++.h>
using namespace std;
#define int long long
struct edge
{
    int p,q;//点，权
};
struct node
{
    int ws,wn;
    vector<edge> w;
};
int n,m;
vector<node> v;
vector<bool> f;
int dfs(int c)
{
    int ret=LONG_LONG_MAX;
    if(c==n)
    {
        ret=0;
        for(int i=1;i<=n;i++)
        {
            ret+=v[i].wn*v[i].ws;
        }
        return ret;
    }
    for(int i=1;i<=n;i++)
    {
        if(f[i])continue;
        f[i]=1;
        for(int j=0;j<v[i].w.size();j++)
        {
            if(!f[v[i].w[j].p])
            {
                v[v[i].w[j].p].wn--;
                v[v[i].w[j].p].ws-=v[i].w[j].q;
            }
        }
        ret=min(dfs(c+1),ret);
        for(int j=0;j<v[i].w.size();j++)
        {
            if(!f[v[i].w[j].p])
            {
                v[v[i].w[j].p].wn++;
                v[v[i].w[j].p].ws+=v[i].w[j].q;
            }
        }
        f[i]=0;
    }
    return ret;
}
void solve()
{

    cin>>n>>m;
    v=vector<node> (n+1);
    f=vector<bool> (n+1);
    int x,y,z;
    for(int i=1;i<=m;i++)
    {
        cin>>x>>y>>z;
        v[x].wn++,v[y].wn++;
        v[x].ws+=z,v[y].ws+=z;
        v[x].w.push_back({y,z});
        v[y].w.push_back({x,z});
    }
    int ans=LONG_LONG_MAX;
    for(int i=1;i<=n;i++)
    {
        f[i]=1;
        for(int j=0;j<v[i].w.size();j++)
        {
            if(!f[v[i].w[j].p])
            {
                v[v[i].w[j].p].wn--;
                v[v[i].w[j].p].ws-=v[i].w[j].q;
            }
        }
        ans=min(dfs(1),ans);
        for(int j=0;j<v[i].w.size();j++)
        {
            if(!f[v[i].w[j].p])
            {
                v[v[i].w[j].p].wn++;
                v[v[i].w[j].p].ws+=v[i].w[j].q;
            }
        }
        f[i]=0;
    }
    cout<<ans;
}
signed main()
{
    //ios::sync_with_stdio(false);
    //cin.tie(nullptr);
    int T=1;
    //cin>>T;
    while(T--)
    {
       solve();
    }
    return 0;
}